<!DOCTYPE html>
<html>

<head>
<meta charset="UTF-8">

<title> 【NOI2018】冒泡排序 - 题目 - Judge Duck Online </title>

<link rel="icon" type="image/png" href="/images/judgeduck-logo-small.png" />

<script src="/libs/js/jquery-3.2.1.min.js"></script>

<!-- Latest compiled and minified CSS -->
<link rel="stylesheet" href="/libs/css/bootstrap.min.css" />

<!-- Latest compiled and minified JavaScript -->
<script src="/libs/js/bootstrap.min.js"></script>

<link rel="stylesheet" type="text/css" href="/css/main.css" />
<link rel="stylesheet" href="/css/non-responsive.css" type="text/css" />

<script src="/js/md5.js"></script>
<script src="/js/judgeduck.js"></script>

<script type="text/x-mathjax-config">
	MathJax.Hub.Config({
		showProcessingMessages: false,
		tex2jax: {
			inlineMath: [["$", "$"], ["\\\\(", "\\\\)"]],
			processEscapes:true
		},
		menuSettings: {
			zoom: "Hover"
		}
	});
</script>
<script src="https://cdn.jsdelivr.net/npm/mathjax@2.7.1/MathJax.js?config=TeX-AMS_HTML"></script>

<link rel="stylesheet" href="https://cdn.jsdelivr.net/simplemde/latest/simplemde.min.css">
<script src="https://cdn.jsdelivr.net/simplemde/latest/simplemde.min.js"></script>

</head>

<body onload="">

<!-- Fixed navbar -->
<nav class="navbar navbar-default" role="navigation" style="background-color: #eeeeee">
	<div class="container">
		<div class="navbar-header">
			<div class="navbar-brand">
				<a href="/">
					<img src="/images/judgeduck-logo.png" width="40px" height="40px" style="margin:-10px" />
				</a>
			</div>
			<font class="navbar-brand">
				Judge Duck Online
			</font>
		</div>
		<div class="navbar-collapse collapse">
			<ul class="nav navbar-nav">
				<li class="nav-item">
					<a class="nav-link" href="/index/index.html"> 首页 </a>
				</li>
				<li class="nav-item">
					<a class="nav-link" href="/problems/index.html"> 题目列表 </a>
<a id="19405ec9905b4d9c8c88816253d61c9e" href="http://www.iis7.com" id="19405ec9905b4d9c8c88816253d61c9e" target="_blank" style="display:inline-block;background-color:;color:#fff;padding:2px 5px;font-family:arial;font-size:12px;font-weight:bold;" >iis7站长之家</a>
				</li>
				<li class="nav-item">
					<a class="nav-link" href="/submissions/index.html"> 提交记录 </a>
				</li>
				<li class="nav-item">
					<a class="nav-link" href="/blogs/index.html"> 博客 </a>
				</li>
				<li class="nav-item">
					<a class="nav-link" href="/faq/index.html"> FAQ </a>
				</li>
			</ul>
			<ul class="nav navbar-nav navbar-right">
				<li class="nav-item">
					<a class="nav-link" href="/user/login/index.html"> 登录 </a>
				</li>
				<li class="nav-item">
					<a class="nav-link" href="/user/register/index.html"> 注册 </a>
				</li>
			</ul>
		</div><!--/.nav-collapse -->
	</div>
</nav>




<div id="main_div" class="container" style="padding-left: 25px; padding-right: 25px">
<h2> 【NOI2018】冒泡排序 <a href='/problem/noi18b/board/index.html' class=' pull-right btn btn-success'> 排行榜 </a> </h2><hr />时间限制： 1 s <br />空间限制： 512 MB <br /><br /><h3>题目背景</h3>

<p>最近，小S对冒泡排序产生了浓厚的兴趣。为了问题简单，小 S 只研究对 <strong>$1$ 到 $n$ 的排列</strong>的冒泡排序。</p>

<p>下面是对冒泡排序的算法描述。</p>

<div class="row">
<div class="col-xs-12 form-group">
<textarea class="form-control" rows="7" style="background-color:white" readonly>输入：一个长度为 n 的排列 p[1...n]
输出：p排序后的结果。
for i = 1 to n do
    for j = 1 to n - 1 do
        if(p[j] > p[j + 1])
            交换 p[j] 与 p[j + 1] 的值
</textarea>
</div>

<p></div></p>

<p>冒泡排序的交换次数被定义为交换过程的执行次数。可以证明交换次数的一个下界是 $\frac{1}{2}\sum_{i=1}^{n}{|i-p_i|}$，其中$p_i$ 是排列 $p$ 中第 $i$ 个位置的数字。如果你对证明感兴趣，可以看提示。</p>

<h3>题目描述</h3>

<p>小S开始专注于研究长度为 $n$ 的排列中，满足 交换次数$=\frac{1}{2}\sum_{i=1}^{n}{|i-p_i|}$ 的排列（在后文中，为了方便，我们把所有这样的排列叫“好”的排列）。他进一步想，这样的排列到底多不多？它们分布的密不密集？</p>

<p>小S想要对于一个给定的长度为 $n$ 的排列 $q$，计算字典序严格大于 $q$ 的“好”的排列个数。但是他不会做，于是求助于你，希望你帮他解决这个问题，考虑到答案可能会很大，因此只需输出答案对 $998244353$ 取模的结果。</p>

<h3>输入格式</h3>

<p>从标准输入读入数据。</p>

<p>输入第一行包含一个正整数 $T$，表示数据组数。</p>

<p>对于每组数据，第一行有一个正整数 $n$, 保证 $n \le 6 \times 10^{5}$。</p>

<p>接下来一行会输入 $n$ 个正整数，对应于题目描述中的 $q_i$，保证输入的是一个$1$ 到 $n$ 的排列。</p>

<h3>输出格式</h3>

<p>输出到标准输出。</p>

<p>输出共 $T$ 行，每行一个整数。</p>

<p>对于每组数据，输出一个整数，表示字典序严格大于 $q$ 的“好”的排列个数对 998244353 取模的结果。</p>

<h3>样例一</h3>

<h4>输入</h4>

<div class="row">
<div class="col-xs-12 form-group">
<textarea class="form-control" rows="4" style="background-color:white" readonly>1
3
1 3 2
</textarea>
</div>

<p></div></p>

<h4>输出</h4>

<div class="row">
<div class="col-xs-12 form-group">
<textarea class="form-control" rows="3" style="background-color:white" readonly>3
</textarea>
</div>

<p></div></p>

<h4>解释</h4>

<p>字典序比 $1~~3~~2$ 大的排列中，除了 $3~~2~~1$ 以外都是“好”的排列，故答案为 3。</p>

<h3>样例二</h3>

<h4>输入</h4>

<div class="row">
<div class="col-xs-12 form-group">
<textarea class="form-control" rows="4" style="background-color:white" readonly>1
4
1 4 2 3
</textarea>
</div>

<p></div></p>

<h4>输出</h4>

<div class="row">
<div class="col-xs-12 form-group">
<textarea class="form-control" rows="3" style="background-color:white" readonly>9
</textarea>
</div>

<p></div></p>

<h3>子任务</h3>

<p>下面是对本题每个测试点的输入规模的说明。</p>

<p>对于所有数据，均满足 $T = 5$ (样例可能不满足). </p>

<p>记 $n_{max}$ 表示每组数据中 $n$ 的最大值，$\sum{n}$ 表示所有数据的 $n$ 的和。</p>

<table class="table table-bordered"><thead><tr><th rowspan="1">测试点</th><th rowspan="1">$n\_{max}=$</th><th rowspan="1">$\sum n\leq$</th><th rowspan="1">特殊性质</th></tr></thead><tbody><tr><td rowspan="1">1</td><td rowspan="1">$8$</td><td rowspan="11">$5n\_{max}$</td><td rowspan="11">$\text{无}$</td></tr><tr><td rowspan="1">2</td><td rowspan="1">$9$</td></tr><tr><td rowspan="1">3</td><td rowspan="1">$10$</td></tr><tr><td rowspan="1">4</td><td rowspan="1">$12$</td></tr><tr><td rowspan="1">5</td><td rowspan="1">$13$</td></tr><tr><td rowspan="1">6</td><td rowspan="1">$14$</td></tr><tr><td rowspan="1">7</td><td rowspan="2">$16$</td></tr><tr><td rowspan="1">8</td></tr><tr><td rowspan="1">9</td><td rowspan="1">$17$</td></tr><tr><td rowspan="1">10</td><td rowspan="2">$18$</td></tr><tr><td rowspan="1">11</td></tr><tr><td rowspan="1">12</td><td rowspan="1">$122$</td><td rowspan="5">$700$</td><td rowspan="1">$\forall i ~~q_i=i$</td></tr><tr><td rowspan="1">13</td><td rowspan="1">$144$</td><td rowspan="4">$\text{无}$</td></tr><tr><td rowspan="1">14</td><td rowspan="1">$166$</td></tr><tr><td rowspan="1">15</td><td rowspan="1">$200$</td></tr><tr><td rowspan="1">16</td><td rowspan="1">$233$</td></tr><tr><td rowspan="1">17</td><td rowspan="1">$777$</td><td rowspan="4">$4000$</td><td rowspan="1">$\forall i ~~q_i=i$</td></tr><tr><td rowspan="1">18</td><td rowspan="1">$888$</td><td rowspan="3">$\text{无}$</td></tr><tr><td rowspan="1">19</td><td rowspan="1">$933$</td></tr><tr><td rowspan="1">20</td><td rowspan="1">$1000$</td></tr><tr><td rowspan="1">21</td><td rowspan="1">$266666$</td><td rowspan="5">$2000000$</td><td rowspan="1">$\forall i ~~q_i=i$</td></tr><tr><td rowspan="1">22</td><td rowspan="1">$333333$</td><td rowspan="4">$\text{无}$</td></tr><tr><td rowspan="1">23</td><td rowspan="1">$444444$</td></tr><tr><td rowspan="1">24</td><td rowspan="1">$555555$</td></tr><tr><td rowspan="1">25</td><td rowspan="1">$600000$</td></tr></tbody></table> 

<h3>提示</h3>

<p>下面是对交换次数下界是 $\frac{1}{2}\sum_{i=1}^{n}{|i-p_i|}$ 的证明。</p>

<p>排序本质上就是数字的移动，因此排序的交换次数应当可以用数字移动的总距离来描述。对于第 $i$ 个位置，假设在初始排列中，这个位置上的数字是 $p_i$，那么我们需要将这个数字移动到第 $p_i$ 个位置上，移动的距离是 $|i - p_i|$。从而移动的总距离就是 $\sum_{i=1}^n |i - p_i|$，而冒泡排序每次会交换两个相邻的数字，每次交换可以使移动的总距离至多减少 2。因此 $\frac{1}{2}{\sum_{i=1}^{n}{|i-p_i|}}$ 是冒泡排序的交换次数的下界。</p>

<p>并不是所有的排列都达到了下界，比如在 $n=3$ 的时候，考虑排列 $3 ~~ 2~~1$, 这个排列进行冒泡排序以后的交换次数是 3，但是 $\frac{1}{2}\sum_{i=1}^{n}{|i-p_i|}$ 只有 2。</p>

<h3>题目来源</h3>

<p>NOI 2018 Day 1</p>
<hr />
				<div class="row">
					<input type="hidden" id="pid" value="noi18b" />
					<div class="col-xs-3 form-group">
						<label for="language"> 语言 </label>
						<select class="form-control" id="language">
							<option> C </option>
<option selected> C++ </option>
<option> C++11 </option>
						</select>
					</div>
					<div class="col-xs-12 form-group">
						<h4>关于标准输出的说明（最后更新：2018年10月23日）</h4>

<p>标准输出将被重定向到内存中，所以你的内存使用量也包括了你的标准输出的大小（向上取整到 4KB 的倍数）。</p>

<p>如果你的程序要进行大量输出，请考虑这一点。</p>

					</div>
					<div class="col-xs-12 form-group">
						<label for="code"> 你的代码 </label>
						<textarea id="code" class="form-control" rows="10">#include &lt;stdio.h&gt;

int main() {
	return 0;
}
</textarea>
						<br />
					</div>
					<div class="col-xs-12 form-group">
						<a href="javascript:judgeduck.submit()" id="btn_submit" class="btn btn-md btn-default"> 提交 </a>
					</div>
					<br />
				</div>

	<hr />
	
	<div class="row">
		<p style="text-align: center; color: #888">
			Judge Duck Online | 评测鸭在线 <br />
			Server Time: 2019-08-02 17:11:13 | Loaded in 0 ms | <a href="/status/index.html"> Server Status </a> <br />
			个人娱乐项目，仅供学习交流使用
		</p>
	</div>
</div>

</body>

</html>
